<?php

namespace view;

require_once ('src/Model/EncryptionModel.php');

class CookieView {
	
/**
 * @var int $m_cookieLength
 * @var string $m_cookieNameUsername
 * @var string $m_cookieNamePassword
 * @var string $m_cookieFailure
 */

  private static $m_cookieLength = 60;
  private static $m_cookieNameUsername = "LaylasKaka1";
  private static $m_cookieNamePassword = "LaylasKaka2";
  private static $m_cookieFailure = "cookieFailure";
  
  
	public function __construct(){
       $this->encryptionModel = new \model\EncryptionModel();
  }
  
	/**
	 * @param \model\LoginModel $loginModel
	 * @return Boolean
	 */	

	// Denna funktion kollar om användaren redan har kakor, både vanliga kakor och sessions kakor... 
	public function hasCookies(\model\LoginModel $loginModel) {
		// Här görs en kolla om de vanliga kakora är satta båda kakorna.och är kakorna satta så retuneras true tillbaka till controllen.
		if (isset($_COOKIE[self::$m_cookieNameUsername]) && isset($_COOKIE[self::$m_cookieNamePassword])) {
            		
            return true;
			
			// Här görs en kolla om de sessions kakora är satta båda kakorna.och är kakorna satta så retuneras true tillbaka till controllen.
			// loginModel anropar funktionen som retunerar Session_Username och Session_Password som fylls i min $_SESSION[]
        } else if (isset($_SESSION[$loginModel->returnSessionUsername()]) && isset($_SESSION[$loginModel->returnSessionPassword()])) {
            return true;

          } else {
              return false;  // annars om kakor inte är satta retuneras fales tillbaka till controllen.
            }
    }

	/**
	 * @param \model\LoginModel $loginModel
	 * @var string $username
	 * @var string $passwordEncrypted
	 * @var string $password
	 * @var array $temp_array
	 * @return array
	 */
	/**
	 * arrayen fylls med 0 =ejinloggad,Laylaskaka1 hämtas och kaka 2, och 1 = Håll mig inloggad.
	 * så att man forsätter att vara inloggad när man stänger ner webbläsaren.
	 * Kakans innehåll fylls i arrayen.
	 */
	// getCookies funktion hämtar ut kakorna 
	public function getCookies(\model\LoginModel $loginModel){		
		// om Laylaskaka1 är satt då körs if satsen, annars om else if
		if (isset($_COOKIE[self::$m_cookieNameUsername])){
			$cookieEndTime = file_get_contents("endtime.txt"); // Tack Daniel Toll 
			
			if (time() > $cookieEndTime){  // Tack Daniel Toll 
				
				$temp_array = array("7", "", "", "0", "0");
				$_SESSION[self::$m_cookieFailure] = "1";
				
				return $temp_array;
			} else {
$temp_array = array("0", $_COOKIE[self::$m_cookieNameUsername], $this->encryptionModel->deCrypt($_COOKIE[self::$m_cookieNamePassword]), "1", "1");

                  return $temp_array;
                }
			
			
      		
		// om inte de vanliga kakorna är satta så hämtar man ut sessions kakor.och fyller arrayen med kakans innehåll 	
        } else if (isset($_SESSION[$loginModel->returnSessionUsername()])){
        	
					if(isset($_SESSION[$loginModel->returnSessionWebBrowser()])){
        		
						$web_browser = $_SERVER[$loginModel->returnSessionHTTP_USER_AGENT()];
					
						if($_SESSION[$loginModel->returnSessionWebBrowser()] == $web_browser){
			$temp_array = array("0", $_SESSION[$loginModel->returnSessionUsername()], $_SESSION[$loginModel->returnSessionPassword()], "0", "0");
							return $temp_array;	// retunerar $temp_array till controllen
							
						} else {
							$temp_array = array("8","","", "0", "0");
								return $temp_array;	// retunerar $temp_array till controllen
							}
					
					} else {
	                	$temp_array = array("8", "", "", "0", "0");					
	                		return $temp_array;	// retunerar $temp_array till controllen
						}
			}
    }

	/**
	 * @return array
	 */
	// denna funktion kollar om man har manupilerade kakor eller inte, skulle kunna ha den i modelen men skitsamma.
	// anropas av controllen
    public function hasTamperedCookies(){
    	
		if(isset($_SESSION[self::$m_cookieFailure])) {
			
			if($_SESSION[self::$m_cookieFailure] == "1"){
				
               $_SESSION[self::$m_cookieFailure] = "0";

                return true;
             } else {
                    return false;
             	}
			 
		} else {
                return false;
        	}     
    }

	/**
	 * @param array $cookieData 
	 */
	
	// Här sätter vi skapar våra kakor. både sessions och vanliga kakor
	public function setCookies($cookieData){
	 	// if satsen körs bara om utrycket är sant.Skapas vanliga kakor..
		if ($cookieData[3] == "1"){	// [3] = 1 betyder att man har bockat i Håll mig inloggad, och då skapar vi vanliga kokor.
		
            $enddate = time() + self::$m_cookieLength;
            file_put_contents("endtime.txt", $enddate);  // Daniel Toll ex:föreläsning 10 Tack =)
            
            setcookie(self::$m_cookieNameUsername, $cookieData[1],  $enddate);
            setcookie(self::$m_cookieNamePassword, $this->encryptionModel->enCrypt($cookieData[2]), time() + self::$m_cookieLength);
		}
		
	}
	
	/**
	 * @param \model\LoginModel $loginModel
	 */
	public function resetCookies(\model\LoginModel $loginModel){
			// Denna if sats körs om användaren har skapat kakor, och här tar vi bort kakorna
		if (isset($_COOKIE[self::$m_cookieNameUsername]) && isset($_COOKIE[self::$m_cookieNamePassword])){
         
            setcookie(self::$m_cookieNameUsername, "", time() -3600);  //sätt minus tid för tabort kaka
            setcookie(self::$m_cookieNamePassword, "", time() -3600);            
        }
		
			if (isset($_SESSION[$loginModel->returnSessionUsername()]) && isset($_SESSION[$loginModel->returnSessionPassword()])){
				//Ta bort Sessions-kakorna
	            unset($_SESSION[$loginModel->returnSessionUsername()]);
	            unset($_SESSION[$loginModel->returnSessionPassword()]);
			}


				if (isset($_SESSION[$loginModel->returnSessionUserJustLogedIn()])){
					//Ta bort Sessions-kakorna            
					unset($_SESSION[$loginModel->returnSessionUserJustLogedIn()]);
				}

	}

}


